﻿using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using Biblioteca.Objetos;
using Biblioteca.DataBase;
using System.Data.Common;
using Biblioteca.Utils;
using Pms.Utils;
using System.Data.OracleClient;
using System.Collections.Generic;

namespace SEG.Objetos
{
    public class Empresa
    {
        private string COD_EMPRESA;
        private string NOM_EMPRESA;
        private string CNPJ_EMPRESA;
        private string END_EMPRESA;
        private string CID_EMPRESA;
        private string UF_EMPRESA;
        private string CEP_EMPRESA;
        private string EMAIL_EMPRESA;
        private string TEL_EMPRESA;
        private string FAX_EMPRESA;

        /// <summary>
        /// Construtor da Classe Empresa
        /// </summary>
        /// <param name="cod_empresa"> código da empresa</param>
        /// <param name="nom_empresa">nome da empresa</param>
        /// <param name="cnpj_empresa">cnpj da empresa</param>
        /// <param name="end_empresa">endereço da empresa </param>
        /// <param name="cid_empresa">cidade da empresa</param>
        /// <param name="uf_empresa">uf da empresa</param>
        /// <param name="cep_empresa">cep da empresa</param>
        /// <param name="email_empresa">email da empresa</param>
        /// <param name="tel_empresa">telefone da empresa</param>
        /// <param name="fax_empresa">fax da empresa</param>
        public Empresa(string cod_empresa, string nom_empresa, string cnpj_empresa, string end_empresa,
                        string cid_empresa, string uf_empresa, string cep_empresa, string email_empresa,
                        string tel_empresa, string fax_empresa)
        {
            this.COD_EMPRESA = cod_empresa;
            this.NOM_EMPRESA = nom_empresa;
            this.CNPJ_EMPRESA = cnpj_empresa;
            this.END_EMPRESA = end_empresa;
            this.CID_EMPRESA = cid_empresa;
            this.UF_EMPRESA = uf_empresa;
            this.CEP_EMPRESA = cep_empresa;
            this.EMAIL_EMPRESA = email_empresa;
            this.TEL_EMPRESA = tel_empresa;
            this.FAX_EMPRESA = fax_empresa;
        }

        public Empresa(string cod_empresa, string nom_empresa)
        {
            this.COD_EMPRESA = cod_empresa;
            this.NOM_EMPRESA = nom_empresa;

        }

        public Empresa()
        {
        }

        /// <summary>
        /// Codigo da Empresa
        /// </summary>
        public string Cod_Empresa
        {
            get { return this.COD_EMPRESA; }
            set { this.COD_EMPRESA = value; }
        }

        /// <summary>
        /// Nome da Empresa
        /// </summary>
        public string Nom_Empresa
        {
            get { return this.NOM_EMPRESA; }
            set { this.NOM_EMPRESA = value; }
        }

        /// <summary>
        /// CNPJ da Empresa
        /// </summary>
        public string Cnpj_Empresa
        {
            get { return this.CNPJ_EMPRESA; }
            set { this.CNPJ_EMPRESA = value; }
        }

        /// <summary>
        /// Endereço da Empresa
        /// </summary>
        public string End_Empresa
        {
            get { return this.END_EMPRESA; }
            set { this.END_EMPRESA = value; }
        }

        /// <summary>
        /// Cidade da Empresa
        /// </summary>
        public string Cid_Empresa
        {
            get { return this.CID_EMPRESA; }
            set { this.CID_EMPRESA = value; }
        }

        /// <summary>
        /// UF da Empresa
        /// </summary>
        public string Uf_Empresa
        {
            get { return this.UF_EMPRESA; }
            set { this.UF_EMPRESA = value; }
        }

        /// <summary>
        /// CEP da Empresa
        /// </summary>
        public string Cep_Empresa
        {
            get { return this.CEP_EMPRESA; }
            set { this.CEP_EMPRESA = value; }
        }

        /// <summary>
        /// Email da Empresa
        /// </summary>
        public string Email_Empresa
        {
            get { return this.EMAIL_EMPRESA; }
            set { this.EMAIL_EMPRESA = value; }
        }

        /// <summary>
        /// Fax da Empresa
        /// </summary>
        public string Fax_Empresa
        {
            get { return this.FAX_EMPRESA; }
            set { this.FAX_EMPRESA = value; }
        }

        /// <summary>
        ///Tel da Empresa
        /// </summary>
        public string Tel_Empresa
        {
            get { return this.TEL_EMPRESA; }
            set { this.TEL_EMPRESA = value; }
        }


        public static List<Empresa> ObterEmpresas(string login)
        {
            List<Empresa> listEmpresas = new List<Empresa>();
            string sql = " SELECT * " +
                         "   FROM SNG_EMPRESA order by 2 ";

            Query qry = new Query(BiblioPMS.ObterConexao(BiblioPMS.aplicacaoSEG, login), sql);
            try
            {
                qry.Executar();

                do
                {
                    Empresa emp = new Empresa(qry.ObterCampo("COD_EMPRESA"), qry.ObterCampo("NOM_EMPRESA"));
                    listEmpresas.Add(emp);

                } while (qry.Proximo());

            }
            catch
            {
                qry.FecharConexao();
                return listEmpresas;
            }
            qry.FecharConexao();
            return listEmpresas;
        }


        public static List<Empresa> ObterEmpresas(string login, string cod_usu)
        {
            List<Empresa> listEmpresas = new List<Empresa>();
            string sql = " SELECT * " +
                         "   FROM SNG_EMPRESA emp, seg_usuario_empresa usuemp" +
                              " where emp.cod_empresa = usuemp.cod_empresa and usuemp.cod_usu =: cod_usu order by 2 ";

            Query qry = new Query(BiblioPMS.ObterConexao(BiblioPMS.aplicacaoSEG, login), sql);
            qry.AdicionarParametro("cod_usu", DbType.String, cod_usu);
            try
            {
                qry.Executar();

                do
                {
                    Empresa emp = new Empresa(qry.ObterCampo("COD_EMPRESA"), qry.ObterCampo("NOM_EMPRESA"));
                    listEmpresas.Add(emp);

                } while (qry.Proximo());

            }
            catch
            {
                qry.FecharConexao();
                return listEmpresas;
            }
            qry.FecharConexao();
            return listEmpresas;
        }

        public static List<Empresa> ObterEmpresasNaoViculadas(string login, string cod_usu)
        {
            List<Empresa> listEmpresas = new List<Empresa>();
            string sql = @" select emp.cod_empresa, emp.nom_empresa
                          from sng_empresa emp,
                               (select cod_empresa
                                  from sng_empresa
                                minus
                                select e.cod_empresa
                                  from sng_empresa e, seg_usuario_empresa usue
                                 where e.cod_empresa = usue.cod_empresa and usue.cod_usu = :cod_usu) usuemp
                         where emp.cod_empresa = usuemp.cod_empresa order by 2";

            Query qry = new Query(BiblioPMS.ObterConexao(BiblioPMS.aplicacaoSEG, login), sql);
            qry.AdicionarParametro("cod_usu", DbType.String, cod_usu);
            try
            {
                qry.Executar();

                do
                {
                    Empresa emp = new Empresa(qry.ObterCampo("COD_EMPRESA"), qry.ObterCampo("NOM_EMPRESA"));
                    listEmpresas.Add(emp);

                } while (qry.Proximo());

            }
            catch
            {
                qry.FecharConexao();
                return listEmpresas;
            }
            qry.FecharConexao();
            return listEmpresas;
        }


        /// <summary>
        /// Pesquisar dados da empresa pelo código
        /// </summary>
        /// <param name="cod_empresa">Código da Empresa</param>
        /// <returns>Objeto Empresa</returns>
        public static Empresa PesquisarEmpresa(string login, string cod_empresa)
        {
            string sql = @"SELECT * FROM SNG_EMPRESA WHERE COD_EMPRESA = :COD_EMPRESA";

            Query qry = null;
            Empresa objEmpresa;

            try
            {
                qry = new Query(BiblioPMS.ObterConexao(BiblioPMS.aplicacaoSEG, login, BiblioPMS.Demo), sql);
                qry.AdicionarParametro(":COD_EMPRESA", DbType.String, cod_empresa);
                qry.Executar();

                objEmpresa = new Empresa(qry.ObterCampo("COD_EMPRESA"), qry.ObterCampo("NOM_EMPRESA"),
                                          qry.ObterCampo("CNPJ_EMPRESA"), qry.ObterCampo("END_EMPRESA"),
                                          qry.ObterCampo("CID_EMPRESA"), qry.ObterCampo("UF_EMPRESA"),
                                          qry.ObterCampo("CEP_EMPRESA"), qry.ObterCampo("EMAIL_EMPRESA"),
                                          qry.ObterCampo("TEL_EMPRESA"), qry.ObterCampo("FAX_EMPRESA"));

                
            }
            catch
            {
                if (qry.EstadoConexao() == ConnectionState.Open)
                    qry.FecharConexao();
                return objEmpresa = new Empresa(); ;

            }

            qry.FecharConexao();

            return objEmpresa;
        }

        public static string PesquisarNome(string login, string cod_empresa)
        {
            string sql = @"SELECT NOM_EMPRESA FROM SNG_EMPRESA WHERE COD_EMPRESA = :COD_EMPRESA";

            Query qry = null;
            Empresa objEmpresa;
            string NomEmpresa;

            try
            {
                qry = new Query(BiblioPMS.ObterConexao(BiblioPMS.aplicacaoSEG, login, BiblioPMS.Demo), sql);
                qry.AdicionarParametro(":COD_EMPRESA", DbType.String, cod_empresa);
                qry.Executar();

                NomEmpresa = qry.ObterCampo("NOM_EMPRESA");
            }
            catch
            {
                if (qry.EstadoConexao() == ConnectionState.Open)
                    qry.FecharConexao();
                return "";

            }

            qry.FecharConexao();

            return NomEmpresa;
        }


        public static int ContarEmpresa(string login, string cod_empresa, string cod_usu)
        {
            string sql = @"SELECT count(*) CONTA FROM SEG_USUARIO_EMPRESA WHERE COD_USU = :COD_USU";

            Query qry = null;
            int cont;

            try
            {
                qry = new Query(BiblioPMS.ObterConexao(BiblioPMS.aplicacaoSEG, login, BiblioPMS.Demo), sql);
                qry.AdicionarParametro(":COD_USU", DbType.String, cod_usu);
                qry.Executar();


                cont = int.Parse(qry.ObterCampo("CONTA"));
                

                
            }
            catch
            {
                if (qry.EstadoConexao() == ConnectionState.Open)
                    qry.FecharConexao();
                return cont = 0; ;

            }

            qry.FecharConexao();

            return cont;
        }


        public void Alterar(string login)
        {
            Tabela Empresa = new Tabela("SNG_EMPRESA", BiblioPMS.ObterConexao(BiblioPMS.aplicacaoSEG, login, BiblioPMS.Demo));
            Empresa.adicionarFiltro(new Coluna("COD_EMPRESA", DbType.Int32, this.COD_EMPRESA));
            Empresa.adicionarColuna(new Coluna("NOM_EMPRESA", DbType.String, this.NOM_EMPRESA));
            Empresa.adicionarColuna(new Coluna("CNPJ_EMPRESA", DbType.Int32, this.CNPJ_EMPRESA));
            Empresa.adicionarColuna(new Coluna("END_EMPRESA", DbType.String, this.END_EMPRESA));
            Empresa.adicionarColuna(new Coluna("CID_EMPRESA", DbType.String, this.CID_EMPRESA));
            Empresa.adicionarColuna(new Coluna("UF_EMPRESA", DbType.String, this.UF_EMPRESA));
            Empresa.adicionarColuna(new Coluna("CEP_EMPRESA", DbType.String, this.CEP_EMPRESA));
            Empresa.adicionarColuna(new Coluna("EMAIL_EMPRESA", DbType.String, this.EMAIL_EMPRESA));
            Empresa.adicionarColuna(new Coluna("TEL_EMPRESA", DbType.String, this.TEL_EMPRESA));
            Empresa.adicionarColuna(new Coluna("FAX_EMPRESA", DbType.String, this.FAX_EMPRESA));            
            Empresa.update();
        }

        public void Inserir(string login)
        {
            Tabela Empresa = new Tabela("SNG_EMPRESA", BiblioPMS.ObterConexao(BiblioPMS.aplicacaoSEG, login, BiblioPMS.Demo));
            Empresa.adicionarColuna(new Coluna("COD_EMPRESA", DbType.Int32, this.COD_EMPRESA));
            Empresa.adicionarColuna(new Coluna("NOM_EMPRESA", DbType.String, this.NOM_EMPRESA));
            Empresa.adicionarColuna(new Coluna("CNPJ_EMPRESA", DbType.Int32, this.CNPJ_EMPRESA));
            Empresa.adicionarColuna(new Coluna("END_EMPRESA", DbType.String, this.END_EMPRESA));
            Empresa.adicionarColuna(new Coluna("CID_EMPRESA", DbType.String, this.CID_EMPRESA));
            Empresa.adicionarColuna(new Coluna("UF_EMPRESA", DbType.String, this.UF_EMPRESA));
            Empresa.adicionarColuna(new Coluna("CEP_EMPRESA", DbType.String, this.CEP_EMPRESA));
            Empresa.adicionarColuna(new Coluna("EMAIL_EMPRESA", DbType.String, this.EMAIL_EMPRESA));
            Empresa.adicionarColuna(new Coluna("TEL_EMPRESA", DbType.String, this.TEL_EMPRESA));
            Empresa.adicionarColuna(new Coluna("FAX_EMPRESA", DbType.String, this.FAX_EMPRESA));
            Empresa.insert();
        }
    }
}
